home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / datelib.exe / EDGETCH.C < prev    next >
C/C++ Source or Header  |  1992-03-27  |  6KB  |  149 lines

  1. static char editgetch_prog[] = "@(#)int editgetch(int form)";
  2. static char editgetch_ver[]  = "@(#)v1.50/kr ; 08.06.91";
  3. /* editgetch    Edit_GetCHaracter - Tastendruck auswerten, bis auf Cursor
  4. **                                  links und rechts alle F-Tasten ignorieren.
  5. **
  6. ** Deklaration  int editgetch(int form);
  7. **
  8. ** Version      1.50(DOS+MKS)
  9. ** Erstellt     08.06.91
  10. ** Autor        Klaus Rath
  11. **
  12. ** Beschreibung 'editgetch' holt einen Tastendruck vom Benutzer ab.
  13. **              Wenn es eine normale Taste war, wird der ASCII-Wert
  14. **              der Taste zurückgegeben, ansonsten passiert werden nur die
  15. **              Tasten KEY_RIGHT und KEY_LEFT akzeptiert.
  16. **              ( Zum "Abholen" wird die Funktion getch() von Borland C++ ver-
  17. **                wendet, nicht die gleichnamige Funktion von CURSES !!! )
  18. **              Die Cursortasten KEY_RIGHT bzw. KEY_LEFT erzeugen BLANK (32)
  19. **              bzw. BACKSPACE (8).
  20. **              Die Funktion erwartet einen INT als Angabe, welche Werte
  21. **              erlaubt sind. Mögliche Angaben ( s. util.h ):
  22. **              ALL   (1) - alle Werte erlaubt
  23. **              UPPER (2) - Buchstaben nur gross
  24. **              LOWER (3) - Buchstaben nur klein
  25. **              NUM   (4) - Nur Zahlen, Punkt, Komma und Vorzeichen
  26. **              DATUM (5) - Nur Zahlen, Punkt, Schrägstrich
  27. **              ZEIT  (6) - Nur Zahlen, Doppelpunkt, Punkt
  28. **              Im Fehlerfall wird jeweils NULL zurückgeliefert.
  29. **              Mögliche andere Sondertasten werden in dieser Version nicht
  30. **              ausgewertet und geben den Wert -1 zurück.
  31. ** Änderungen   1.00 ; 08.06.91
  32. **              - erste Version int editgetch(void)
  33. **              1.50 ; 08.06.91
  34. **              - Übergabeparameter 'int form' zur Prüfung auf bestimmte
  35. **                Vorgaben, z.B. nur Großbuchstaben .....
  36. */
  37.  
  38. /* Notwendige Einbindungen :
  39. */
  40. #include <stdio.h>
  41. #ifdef __TURBOC__
  42. #include <conio.h>
  43. #endif
  44. #include <ctype.h>
  45. #include "util.h"                                          /* wg. KEY_...   */
  46.  
  47. #ifdef __TURBOC__
  48. int editgetch(int form)
  49. #else
  50. int editgetch(form)
  51. int form;
  52. #endif
  53. {
  54.   int ch;
  55.  
  56.   /* Erstmal ein Zeichen holen; falls es keine Funktionstaste war
  57.   ** wird der ASCII-Wert nach Vorgabe überprüft und evtl. zurückgegeben :
  58.   */
  59.   if ( ( ch = getch() ) > 0 ) {
  60.      switch ( form ) {
  61.         case ALL    : return(ch);
  62.         case UPPER  : if ( ch > 96 && ch < 123 )
  63.                          return(toupper(ch));
  64.                       else {
  65.                          switch ( ch ) {
  66.                             case 132: return(142); /* ä */
  67.                             case 148: return(153); /* ö */
  68.                             case 129: return(154); /* ü */
  69.                             default : return(ch);
  70.                          } /* ENDE: switch(ch) */
  71.                       } /* ENDE: if(ch) */
  72.         case LOWER  : if ( ch > 64 && ch < 91 )
  73.                          return(tolower(ch));
  74.                       else {
  75.                          switch ( ch ) {
  76.                             case 142: return(132); /* Ä */
  77.                             case 153: return(148); /* Ö */
  78.                             case 154: return(129); /* Ü */
  79.                             default : return(ch);
  80.                          } /* ENDE: switch(ch) */
  81.                       } /* ENDE: if(ch) */
  82.         case NUM    : if ( ch > 47 && ch < 58 )
  83.                          return(ch);
  84.                       else {
  85.                          switch ( ch ) {
  86.                             case  8 :              /* BACKSPACE */
  87.                             case 10 :              /* LF */
  88.                             case 13 :              /* CR */
  89.                             case 27 :              /* ESCAPE */
  90.                             case 43 :              /* + */
  91.                             case 44 :              /* , */
  92.                             case 45 :              /* - */
  93.                             case 46 : return(ch);  /* . */
  94.                             default : return(0);
  95.                          } /* ENDE: switch(ch) */
  96.                       } /* ENDE: if(ch) */
  97.         case DATUM  : if ( ch > 47 && ch < 58 )
  98.                          return(ch);
  99.                       else {
  100.                          switch ( ch ) {
  101.                             case  8 :              /* BACKSPACE */
  102.                             case 10 :              /* LF */
  103.                             case 13 :              /* CR */
  104.                             case 27 :              /* ESCAPE */
  105.                             case 45 :              /* - */
  106.                             case 47 :              /* / */
  107.                             case 46 : return(ch);  /* . */
  108.                             default : return(NULL);
  109.                          } /* ENDE: switch(ch) */
  110.                       } /* ENDE: if(ch) */
  111.         case ZEIT   : if ( ch > 47 && ch < 58 )
  112.                          return(ch);
  113.                       else {
  114.                          switch ( ch ) {
  115.                             case  8 :              /* BACKSPACE */
  116.                             case 10 :              /* LF */
  117.                             case 13 :              /* CR */
  118.                             case 27 :              /* ESCAPE */
  119.                             case 58 :              /* : */
  120.                             case 46 : return(ch);  /* . */
  121.                             default : return(NULL);
  122.                          } /* ENDE: switch(ch) */
  123.                       } /* ENDE: if(ch) */
  124.         default     : return(NULL);
  125.      } /* ENDE: switch(form) */
  126.   } /* ENDE: if(ch) */
  127.   else {
  128.   /* Ansonsten muß ein zweites Zeichen eingelesen werden:
  129.   */
  130.      ch = getch();
  131.      switch ( ch ) {
  132.         case KEY_IC:
  133.         case KEY_DC:
  134.         case KEY_HOME:
  135.         case KEY_END:
  136.         case KEY_PGUP:
  137.         case KEY_PGDN:
  138.         case KEY_UP:
  139.         case KEY_DOWN:  return( -1 );
  140.         case KEY_LEFT:  return(  8 );
  141.         case KEY_RIGHT: return( 32 );
  142.         default:        return( -1 );
  143.       } /* ENDE:switch(ch) */
  144.  
  145.   } /* ENDE:if-else(ch=getch) */
  146.  
  147. } /* ENDE:editgetch() */
  148.  
  149.